﻿using System;
using Redis.Core;

namespace Redis.Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.ReadKey();
            RedisConfig config = new RedisConfig();
            try
            {
                config.ReadWirteHost.Add(new ServerConfig("127.0.0.1:6379") { Password = "123456" });
                config.ReadWirteHost.Add(new ServerConfig("127.0.0.1:6379") { Password = "123456" });
                Manager.Init(config);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
                return;
            }



            using (var Context = new RedisSet<Int32>("DataSet_1"))
            {
                Context.Add(12345);
            }

            using (var Context = new RedisKeys())
            {
   
                Context.SetValue("Time", DateTime.Now);
                Context.SetValue("A", 12345678);
                Context.SetValue("X", 1000);

                for (int i = 0; i < 100; i++)
                {
                    Context.Increment("X", 1);
                    Context.Decrement("X", 1);
                }
                Context.SetValue("X", 8000);
                var s = Context.GetValue<String>("X");
                var list = Context.GetValues<Object>();
                Console.WriteLine(s);
               // Context.SaveAsync();
            }


            using (var Context = new RedisList<String>("Table"))
            {
                Console.WriteLine($"表[Table]是否存在：{Context.IsExist}");
                Context.Add("A");
                Context.Add("B");
                Context.Add("C");
                Context.Add("D");
                Context.Add("E");
                Console.WriteLine($"表[Table]第三条数据：{Context.Items(3)}");

                foreach (var item in Context.Items())
                {
                    Console.Write(item);
                    Console.Write(" ");
                }
                Console.WriteLine();
                //5秒后 该列表将过期。
                //Context.ExpireAt(5000);

                using (Context.Lock("123"))
                {
                    //Console.ReadKey();
                }

            }

            using (var Context = new RedisList<String>("Table"))
            {
                Console.WriteLine($"表[Table]是否存在：{Context.IsExist}");
                Console.WriteLine();
                Console.WriteLine($"表[Table]是否存在：{Context.IsExist}");
            }


            using (var Context = new RedisHash("Hash_1"))
            {
                Context.SetValue("A", 123456);
                Context.SetValue("B", "ABSD");
                Context.SetValue("C", 1312541);
                Context.SetValue("D", DateTime.Now);

                Console.WriteLine($"Hash.C = {Context.GetValue<String>("C")}");
                Context.Increment("C", 100);
                Console.WriteLine($"Hash.C = {Context.GetValue<String>("C")}");
                Context.Decrement("C", 100);
                Console.WriteLine($"Hash.C = {Context.GetValue<String>("C")}");

                Console.WriteLine($"Hash.A = {Context.GetValue<String>("B")}");
                var list = Context.GetKeyValues<String>("A", "F", "H", "G");
                var list2 = Context.GetKeyValues();
                Console.WriteLine(list2);

            }
            Random R = new Random();
            using (var Context = new RedisSortedSet<Guid>("SortedSet_1"))
            {
                for (int i = 0; i < 100; i++)
                {
                    Context.Add(Guid.NewGuid(), R.Next(1000, 10000) / 1000F);
                }



                var Highest = Context.PopItemWithHighestScore();
                var lowe = Context.PopItemWithLowestScore();
               // Context.Save();
            }

            Manager.Default.Save();

            Console.ReadKey();

        }
    }
}
